package com.youlu.campus.web.group.service;

import com.youlu.campus.base.base.PageQueryRequest;
import com.youlu.campus.web.group.dto.request.CreateGroupRequest;
import com.youlu.campus.web.group.dto.request.GroupMemberRequest;
import com.youlu.campus.web.group.dto.request.GroupQuitRequest;
import com.youlu.campus.web.group.dto.request.UniversityGroupRequest;
import com.youlu.campus.web.group.dto.response.GroupBaseResponse;
import com.youlu.campus.web.group.dto.response.GroupHomeResponse;
import com.youlu.campus.web.group.dto.response.GroupMemberResponse;
import com.youlu.campus.web.group.dto.response.GroupResponse;
import com.youlu.campus.web.group.entity.GroupPO;
import org.springframework.data.domain.Page;

/**
 * 小组相关服务
 */
public interface GroupService {


    /**
     * 创建小组
     * @param request
     * @return
     */
    String createGroup(CreateGroupRequest request);

    /**
     * 编辑小组
     * @param request
     * @return
     */
    String editGroup(CreateGroupRequest request);

    /**
     * 获取小组主页信息
     * @param groupId
     * @return
     */
    GroupHomeResponse getGroupHomeInfo(String groupId);

    /**
     * 获取成员列表
     * @return
     */
    Page<GroupMemberResponse> getGroupMembers(GroupMemberRequest request);

    /**
     * 加入小组
     * @param groupId
     * @return
     */
    String joinGroup(String groupId);

    /**
     * 退出小组
     * @param request
     * @return
     */
    String quitGroup(GroupQuitRequest request);

    /**
     * 小组试用期处理
     * @param groupId
     */
    void handleGroupProbation(String groupId);

    /**
     * 是否加入了小组
     * @param userId
     * @return
     */
    boolean isJoinGroup(String userId);

    /**
     * 当前用户是否小组组长
     * @param groupId
     * @return
     */
    boolean isGroupLeader(String groupId,String userId);

    /**
     * 获取大学组织列表
     * @return
     */
    Page<GroupResponse> getUniversityGroups(UniversityGroupRequest request);

    /**
     * 获取加入了小组信息
     * @param userId
     * @return
     */
    GroupPO getJoinGroup(String userId);

    /**
     * 获取加入了小组ID
     * @param userId
     * @return
     */
    String getJoinGroupId(String userId);

    /**
     * 获取我加入的小组信息
     * @return
     */
    GroupResponse getMyJoinGroup();

    /**
     * 获取大学组织数量
     * @param universityValue
     * @return
     */
    Long getUniversityGroupCount(String universityValue);


    /**
     * 获取组织活力排行榜
     * @return
     */
    Page<GroupResponse> getGroupRank(PageQueryRequest request);

    void handleGroupActiveValue();

    /**
     * 获取解散弹窗
     * @return
     */
    GroupBaseResponse getGroupDissolutionPopup();

    GroupResponse getMyGroupRank();
}
